/*
文件名：p_comp.h
时间：2024-4-27
功能：
	电力信号的压缩
*/
#ifndef P_COMP_H
#define P_COMP_H

#include "common.h"

extern "C"
{
	void cdft(int n, int isgn, float *a, int *ip, float *w);
	void rdft(int n, int isgn, float *a, int *ip, float *w);
}

#define S_N 8192
#define P_W2	5	//半峰宽
//#define P_W2	30	//半峰宽

#pragma pack(1)
typedef struct 
{
//主要频率
	u16 main_st; //主峰起始位置
	float fre_buf[P_W2*2*2]; //复数
//每个点的误差的差分
	s8 dd_list[S_N];
} S_PCP_MAIN_FRE; 
#pragma pack()

#pragma pack(1)
typedef struct 
{
	s16 wavelet_buf[S_N/8+16]; //小波系数
	//s16 wavelet_buf[S_N/4]; //小波系数
//每个点的误差的差分
	s8 dd_list[S_N];
} S_PCP_WAVELET; 
#pragma pack()

extern float f_s_in[S_N]; //浮点信号，fft输入用，后续用作残差
extern s16 s16_s_in[S_N]; //主峰时域波形
extern float tmp_fre_buf[S_N]; //调试用频域缓存
extern int fft_ip[S_N/2]; //用(2 + sqrt(FFT_LEN))，给足够大
extern float fft_w[S_N/2]; //用FFT_LEN / 2

void tc_compress(s16 *in, S_PCP_MAIN_FRE &out); //压缩
void tc_decompress(S_PCP_MAIN_FRE &in, s16 *out); //解压缩

void tc_compress1(s16 *in, S_PCP_WAVELET &out); //压缩
void tc_decompress1(S_PCP_WAVELET &in, s16 *out); //解压缩

#endif

